package com.example.spindrift.dao;

import com.example.spindrift.models.SysSong;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@Mapper
public interface SysSongMapper {
    /**
     * 获取所有歌曲信息
     * @return
     */
    List<SysSong> getAllSong();

    /**
     * 根据歌曲类型查询歌曲信息
     * @param type_id 歌曲类型ID
     * @return
     */
    List<SysSong> getSongByType(Integer type_id);

    /**
     * 根据歌曲名称获取歌曲信息
     * @param songName 歌曲名称
     * @return
     */
    List<SysSong> getSongByName(String songName);

    /**
     * 根据歌曲名称模糊查询歌曲信息
     * @param keyword 查询关键字
     * @return
     */
    List<SysSong> searchSong(String keyword);

    /**
     * 根据歌曲ID查询歌曲信息
     * @param song_id 歌曲ID
     * @return
     */
    SysSong getSongById(Integer song_id);

    /**
     * 根据歌手ID查询歌曲信息
     * @param sing_id 歌手ID
     * @return
     */
    List<SysSong> getSongBySing(Integer sing_id);

    /**
     * 根据用户ID查询歌曲信息（根据用户ID匹配添加人ID）
     * @param userId　用户ID
     * @return
     */
    List<SysSong> getSongByUser(Integer userId);

    /**
     * 根据歌曲添加时间降序查询所有歌曲信息
     * @return
     */
    List<SysSong> getNewSong();

    /**
     * 获取热度排行榜数据
     * @return
     */
    List<SysSong> getHostRank();

    /**
     * 获取收藏排行
     * @return
     */
    List<SysSong> getCollectRank();

    /**
     * 更新歌曲热度
     * @param songId 歌曲ID
     * @param host 更新量（热度增加量）
     * @return
     */
    Integer updateSongHost(@Param("song_id")Integer songId,@Param("host") Integer host);

    /**
     * 添加一条歌曲信息
     * @param song 歌曲信息
     * @return
     */
    Integer insertSong(SysSong song);

    /**
     * 编辑一条歌曲信息
     * @param song 新的歌曲信息
     * @return
     */
    Integer updateSong(SysSong song);

    /**
     * 更改歌曲状态
     * @param song_id 歌曲ID
     * @param state 歌曲状态
     * @return
     */
    Integer updateSongState(Integer song_id,String state);

    /**
     * 根据歌曲ID删除一条歌曲记录（不删除歌曲文件）
     * @param song_id 歌曲ID
     * @return
     */
    Integer deleteSong(Integer song_id);
}
